/**
 * @file global.h
 * @author your name (you@domain.com)
 * @brief 全局变量
 * @version 0.1
 * @date 2025-04-01
 *
 * @copyright Copyright (c) 2025
 *
 */
#ifndef GLOBAL_H
#define GLOBAL_H

#include "xmzTypeDefine.h"
#include <stdint.h>
typedef uint32_t u32;
typedef uint16_t u16;
typedef uint8_t u8;
#define test_z 0
/*结构体数组*/
#pragma pack(push, 1)
typedef struct {
  uint8_t bit0;
  uint8_t bit1;
  uint8_t bit2;
  uint8_t bit3;
  uint8_t bit4;
  uint8_t bit5;
  uint8_t bit6;
  uint8_t bit7;
} BitStruce;
#pragma pack(pop)

/*modbus相关 */
#define SLAVE_ADDR 0x01
#define REG_SIZE 1024 // 寄存器数组大小
#define REG_NUMBER 20 // 寄存器数量

extern Byte plc_DB[REG_NUMBER][REG_SIZE]; // 寄存器数组
extern volatile Time system_run_time; /*系统运行时间，给定时器用*/

/**
 * @brief gpio定义
 *
 */
#define POWER_DOWN_WAY 1 // 定义为1时使用线中断检测；为0时主循环检测

/* 普通输入8路 X00-X07 */
#define I00_Pin GPIO_PIN_12
#define I00_GPIO_Port GPIOA
#define I01_Pin GPIO_PIN_11
#define I01_GPIO_Port GPIOA
#define I02_Pin GPIO_PIN_10
#define I02_GPIO_Port GPIOA
#define I03_Pin GPIO_PIN_9
#define I03_GPIO_Port GPIOA
#define I04_Pin GPIO_PIN_8
#define I04_GPIO_Port GPIOA
#define I05_Pin GPIO_PIN_9
#define I05_GPIO_Port GPIOC
#define I06_Pin GPIO_PIN_8
#define I06_GPIO_Port GPIOC
#define I07_Pin GPIO_PIN_7
#define I07_GPIO_Port GPIOC

/* 高速输入6路 X00-X07 */
#define I08_Pin GPIO_PIN_3
#define I08_GPIO_Port GPIOB
#define I09_Pin GPIO_PIN_4
#define I09_GPIO_Port GPIOB
#define I10_Pin GPIO_PIN_6
#define I10_GPIO_Port GPIOB
#define I11_Pin GPIO_PIN_5
#define I11_GPIO_Port GPIOE
#define I12_Pin GPIO_PIN_1
#define I12_GPIO_Port GPIOA
#define I13_Pin GPIO_PIN_14
#define I13_GPIO_Port GPIOB

/* 普通输出6路 Y00-Y05 */
#define Q00_Pin GPIO_PIN_15
#define Q00_GPIO_Port GPIOD
#define Q01_Pin GPIO_PIN_14
#define Q01_GPIO_Port GPIOD
#define Q02_Pin GPIO_PIN_13
#define Q02_GPIO_Port GPIOD
#define Q03_Pin GPIO_PIN_12
#define Q03_GPIO_Port GPIOD
#define Q04_Pin GPIO_PIN_11
#define Q04_GPIO_Port GPIOD
#define Q05_Pin GPIO_PIN_10
#define Q05_GPIO_Port GPIOD

/* 高速输出4路 Y06-Y09 */
#define Q06_Pin GPIO_PIN_13
#define Q06_GPIO_Port GPIOE
#define Q07_Pin GPIO_PIN_11
#define Q07_GPIO_Port GPIOE
#define Q08_Pin GPIO_PIN_6
#define Q08_GPIO_Port GPIOC
#define Q09_Pin GPIO_PIN_9
#define Q09_GPIO_Port GPIOE

/* 指示灯  */
#define LED_ERR_GPIO_PIN GPIO_PIN_2
#define LED_ERR_GPIO_PORT GPIOE
#define LED_RUN_GPIO_PIN GPIO_PIN_3
#define LED_RUN_GPIO_PORT GPIOE

#define LED_LINK_GPIO_PORT GPIOC
#define LED_LINK_GPIO_PIN GPIO_PIN_0
#define LED_CAN_GPIO_PORT GPIOC
#define LED_CAN_GPIO_PIN GPIO_PIN_1

#endif
